package com.gzx.plugin.tjzy.modular.call.predict.service;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gzx.plugin.tjzy.modular.call.predict.bo.GzxPredictCallAddBo;
import com.gzx.plugin.tjzy.modular.call.predict.bo.GzxPredictCallExcelBo;
import com.gzx.plugin.tjzy.modular.call.predict.entity.GzxPredictCall;
import com.gzx.plugin.tjzy.modular.call.predict.entity.GzxPredictCallDetail;
import com.gzx.plugin.tjzy.modular.call.predict.vo.GzxPredictAllVo;
import com.gzx.plugin.tjzy.modular.call.predict.vo.GzxPredictCallDetailVo;
import com.gzx.plugin.tjzy.modular.call.predict.vo.GzxPredictCallVo;

import java.util.List;

/**
 * @author zjt
 * @description
 * @since 2025/6/9 16:30
 */
public interface GzxPredictCallDbService {

    //获取线路信息
    List<GzxPredictAllVo> getCallerInfo(String currentMonth);

    /**
     * 查询单条预测外呼数据
     *
     * @param lambdaQueryWrapper
     * @return
     */
    GzxPredictCall selectOne(LambdaQueryWrapper<GzxPredictCall> lambdaQueryWrapper);

    /**
     * 查询预测外呼集合
     *
     * @param lambdaQueryWrapper
     * @return
     */
    List<GzxPredictCall> selectList(LambdaQueryWrapper<GzxPredictCall> lambdaQueryWrapper);

    /**
     * 分页查询预测外呼主表
     *
     * @param page
     * @param lambdaQueryWrapper
     * @return
     */
    Page<GzxPredictCallVo> selectVoPage(Page page, LambdaQueryWrapper<GzxPredictCall> lambdaQueryWrapper);

    /**
     * 保存预测外呼主表
     *
     * @param predictCallAddBo
     * @param userJson
     * @param totalCount
     */
    void saveBatch(GzxPredictCallAddBo predictCallAddBo, JSONObject userJson, Integer totalCount);

    /**
     * 修改预测外呼主表数据
     *
     * @param lambdaUpdateWrapper
     */
    void update(LambdaUpdateWrapper<GzxPredictCall> lambdaUpdateWrapper);

    /**
     * 根据ID修改预测外呼主表数据
     *
     * @param predictCall
     */
    void updateById(GzxPredictCall predictCall);

    /**
     * 删除
     *
     * @param lambdaUpdateWrapper
     */
    void delete(LambdaUpdateWrapper<GzxPredictCall> lambdaUpdateWrapper);

    /**
     * 分页查询预测外呼明细表
     *
     * @param page
     * @param lambdaQueryWrapper
     * @return
     */
    Page<GzxPredictCallDetailVo> selectDetailVoPage(Page page, LambdaQueryWrapper<GzxPredictCallDetail> lambdaQueryWrapper);

    /**
     * 查询预测外呼明细
     *
     * @param lambdaQueryWrapper
     * @return
     */
    List<GzxPredictCallDetail> selectDetailList(LambdaQueryWrapper<GzxPredictCallDetail> lambdaQueryWrapper);

    /**
     * 根据Detail查询ID
     *
     * @param id
     * @return
     */
    GzxPredictCallDetailVo selectDetailVoById(Long id);

    /**
     * 批量保存预测外呼明细
     *
     * @param predictCallAddBo
     * @param predictCallExcelBoList
     * @param user
     */
    void saveDetail(GzxPredictCallAddBo predictCallAddBo, List<GzxPredictCallExcelBo> predictCallExcelBoList, JSONObject user);

    /**
     * 修改预测外呼明细数据
     *
     * @param lambdaUpdateWrapper
     */
    void updateDetail(LambdaUpdateWrapper<GzxPredictCallDetail> lambdaUpdateWrapper);

    /**
     * 删除预测外呼明细
     *
     * @param lambdaUpdateWrapper
     */
    void deleteDetail(LambdaUpdateWrapper<GzxPredictCallDetail> lambdaUpdateWrapper);

    /**
     * 修改预测外呼状态和数量
     *
     * @param sortedTaskIdList
     */
    void modifyBatchStatusAndCount(List<String> sortedTaskIdList);

}
